// vim:sw=4:ai:aw
#pragma once
#ifndef	__Allocator_h__
#define	__Allocator_h__

#include "Area.h"	// voor: class Area

// Beschrijving van de INTERFACE van een
// geheugenbeheer algoritme.
class Allocator {
protected:
	// m.a.w. alleen voor afgeleide classes

	const char * type; // De naam van het algoritme
	// b.v. "FirstFit", "Buddy", etc
	int size; // Hoeveel geheugen beheren we.

	Allocator(const char * type);

public:
	// m.a.w. ook toegangkelijk voor anderen

	virtual ~Allocator() {
	}

	const char * getType() const {
		return type;
	}
	const int getSize() const {
		return size;
	}

	// Afgeleide classes MOGEN setSize zelf herdefinieren
	// zolang ze deze methode ook maar aanroepen.

	virtual void setSize(int size); // Stel de omvang van het
	// te beheren gebied in.

	// Afgeleide classes MOETEN de volgende methodes zelf definieren.

	virtual const Area * alloc(int wanted) = 0; // Iemand vraagt om geheugen
	// NB: const omdat 'main' de Area's nooit mag veranderen !

	virtual void free(const Area *) = 0; // Iemand geeft een Area weer terug

	// ... en hier komen straks de andere functies ...
	// ... om b.v. de overhead te bepalen ...
	// ... of de fragmentatie graad ...

};

#endif	/*Allocator_h*/
